/*
 * 身份证15位编码规则：dddddd yymmdd xx p
 * dddddd：6位地区编码
 * yymmdd: 出生年(两位年)月日，如：910215
 * xx: 顺序编码，系统产生，无法确定
 * p: 性别，奇数为男，偶数为女
 *
 * 身份证18位编码规则：dddddd yyyymmdd xxx y
 * dddddd：6位地区编码
 * yyyymmdd: 出生年(四位年)月日，如：19910215
 * xxx：顺序编码，系统产生，无法确定，奇数为男，偶数为女
 * y: 校验码，该位数值可通过前17位计算获得
 *
 * 前17位号码加权因子为 Wi = [ 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ]
 * 验证位 Y = [ 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ]
 * 如果验证码恰好是10，为了保证身份证是十八位，那么第十八位将用X来代替
 * 校验位计算公式：Y_P = mod( ∑(Ai×Wi),11 )
 * i为身份证号码1...17 位; Y_P为校验码Y所在校验码数组位置
 * @param {Object} mui实例对象，用于调用toast弹窗
 */
function validateIdCard(idCard,obj){
	//15位和18位身份证号码的正则表达式
	var regIdCard=/^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/;
	if(!obj){
		var obj = mui;
	}
	//如果通过该验证，说明身份证格式正确，但准确性还需计算
	if(regIdCard.test(idCard)){
		if(idCard.length==18){
			var idCardWi=new Array( 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 ); //将前17位加权因子保存在数组里
			var idCardY=new Array( 1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2 ); //这是除以11后，可能产生的11位余数、验证码，也保存成数组
			var idCardWiSum=0; //用来保存前17位各自乖以加权因子后的总和
			for(var i=0;i<17;i++){
				idCardWiSum+=idCard.substring(i,i+1)*idCardWi[i];
			}

			var idCardMod=idCardWiSum%11;//计算出校验码所在数组的位置
			var idCardLast=idCard.substring(17);//得到最后一位身份证号码

			//如果等于2，则说明校验码是10，身份证号码最后一位应该是X
			if(idCardMod==2){
				if(idCardLast=="X"||idCardLast=="x"){
					console.log("验证成功！");
					return true;
				}else{
					obj.toast("身份证号码错误！");
					return false;
				}
			}else{
				//用计算出的验证码与最后一位身份证号码匹配，如果一致，说明通过，否则是无效的身份证号码
				if(idCardLast==idCardY[idCardMod]){
					console.log("验证成功！");
					return true;
				}else{
					obj.toast("身份证号码错误！");
					return false;
				}
			}
		}
	}else{
		obj.toast("身份证格式不正确!");
		return false;
	}
}

/**
 * @description 实名认证检验
 * @constructor
 * @param {Function} callback 实名认证通过执行该回调函数
 * 
 */
function certification(callback){
	plus.nativeUI.showWaiting();
	//实名认证 每次都需要实时获取 除了已经认证成功;
	if(plus.storage.getItem('cg_certification')!=1){
		myAjax('personal/user_profile/getselfprofile', 'get', {
			'user_id': plus.storage.getItem('cg_user_id'),
			'user_token': plus.storage.getItem('cg_user_token')
		}, function(data) {
			plus.nativeUI.closeWaiting();
			if(!data.success){
				plus.nativeUI.alert(data.error_msg, function() {
					mui.back();
				}, "错误", "确定");
				return ;//发生错误 就直接退出
			}
			plus.storage.setItem('cg_certification', data.certification);
			var main = plus.webview.getWebviewById('my-1.html');
			if(main){
				mui.fire(main, "certification",{});
			}	
			var certification = plus.storage.getItem('cg_certification') ;
			var	confirmArray = ['前往认证','稍后认证'];
			if(certification==-1){
				mui.confirm('您尚未进行实名认证，无法进行社保查询。','实名认证',confirmArray,function(e){
					if(e.index == 0){
						var self = plus.webview.currentWebview();
						self.close();
						mui.openWindow({
						    url:'../my/user-4-1.html',
						    id:'user-4-1.html',
						     show:{
							      autoShow:false,//页面loaded事件发生后自动显示，默认为true
							      duration:200//页面动画持续时间，Android平台默认100毫秒，iOS平台默认200毫秒；
							},
							 waiting:{
						      	title:'正在加载...'//等待对话框上显示的提示内容
						     }
						});	
						return;
					}
					mui.back();
				})
				return;
			}else{
				if(certification == 0){
					mui.alert('您的实名认证正在审核中，请耐心等待。','实名认证','确定',function(e){									
						mui.back();
					})
				}else if(certification == 2){
					mui.confirm('您的实名认证未通过，请重新认证。','实名认证',confirmArray,function(e){
						if(e.index == 0){
							var self = plus.webview.currentWebview();
							self.close();
							mui.openWindow({
							    url:'../my/user-4.html',
							    id:'user-4.html',
							     show:{
								      autoShow:false,//页面loaded事件发生后自动显示，默认为true
								      duration:200//页面动画持续时间，Android平台默认100毫秒，iOS平台默认200毫秒；
								},
								 waiting:{
							      	title:'正在加载...'//等待对话框上显示的提示内容
							     }
							});	
							return;
						}
						mui.back();
					})
				}else if(certification == 1){
					callback();
				}
			}
		});
	}else{
		plus.nativeUI.closeWaiting();
		callback();
	}
}

/**
 * @description 部分信息隐藏
 * @constructor
 * @param {String} str 需要隐藏的字符串 (若为汉字，默认为名字注释格式,3个字注释第一个字，3个以上注释前两个字)
 * @param {Number} frontLen 首部注释个数
 * @param {Number} endLen  尾部注释个数
 * 
 */
function replaceStr (str,frontLen,endLen) {
	var reg = new RegExp("^[\u4e00-\u9fa5]+(·[\u4e00-\u9fa5]+)*$");
	if(reg.test(str)){
		if(str.length > 3){
			return "**" + str.substring(2,str.length);
		}else{
			return "*" + str.substring(1,str.length);
		}
	}else{
		var frontX = '',endX ='';
		for (var i=0; i < frontLen; i++) {
			frontX+='*';
		}
		for (var j=0; j < endLen; j++) {
			endX +='*';
		}
		return frontX + str.substring(frontLen,str.length - endLen) + endX;
	}	
}